#ifndef __LOG_NEW_H__
#define __LOG_NEW_H__

#include "stdio.h"
#include "nui_things/HAL/include/platform_define.h"
#include <stdarg.h>

typedef enum  {
  Verbose,
  Debug,
  Info,
  Warning,
  Error,
  MaxLogLevel
}LogLevel;

typedef enum  {//bits
  kLogDebugInfoNone=0,
  kLogDebugInfoPrint=0x01,
  kLogDebugInfoFile=0x02,
}LogDebugInfo;

int log_setLevel(LogLevel log_level);
int log_setEnable(int enable_set);
int log_setDebugInfo(int debug_info_set);

int log_getLevel();

#ifdef PLATFORM_DEFINE
#if (PLATFORM_DEFINE==SC5654A)

#include "aos.h"
#define KLOGE(tag, fmt, arg...)  sl_printf(fmt "\n", ##arg)
#define KLOGW(tag, fmt, arg...)  sl_printf(fmt "\n", ##arg)
#define KLOGI(tag, fmt, arg...)  
//sl_printf(fmt "\n", ##arg)
#define KLOGD(tag, fmt, arg...)
//sl_printf(fmt "\n", ##arg)
#elif (PLATFORM_DEFINE==YOC)
#define KLOGE(tag, fmt, arg...)  printf(fmt "\n", ##arg)
#define KLOGW(tag, fmt, arg...)  
#define KLOGI(tag, fmt, arg...) 
#define KLOGD(tag, fmt, arg...)
#else


void log_v(const char* tag, const char* fmt, ...);
void log_d(const char* tag, const char* fmt, ...);
void log_i(const char* tag, const char* fmt, ...);
void log_w(const char* tag, const char* fmt, ...);
void log_e(const char* tag, const char* fmt, ...);


#define KLOGV(tag, fmt, ...) log_v(tag, fmt, ##__VA_ARGS__)
#define KLOGD(tag, fmt, ...) log_d(tag, fmt, ##__VA_ARGS__)
#define KLOGI(tag, fmt, ...) log_i(tag, fmt, ##__VA_ARGS__)
#define KLOGW(tag, fmt, ...) log_w(tag, fmt, ##__VA_ARGS__)
#define KLOGE(tag, fmt, ...) log_e(tag, fmt, ##__VA_ARGS__)

#endif

#else
#define KLOGE(tag, fmt, arg...)  printf("[E][%s][F:%s][L:%d] " fmt "\n", tag, __func__, __LINE__, ##arg)
#define KLOGW(tag, fmt, arg...)  printf("[W][%s][F:%s][L:%d] " fmt "\n", tag, __func__, __LINE__, ##arg)
#define KLOGI(tag, fmt, arg...)  printf("[I][%s][F:%s][L:%d] " fmt "\n", tag, __func__, __LINE__, ##arg)
#define KLOGD(tag, fmt, arg...)  printf("[D][%s][F:%s][L:%d] " fmt "\n", tag, __func__, __LINE__, ##arg)
#endif

#endif
